home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / v7n11.arc / PP711.ARC / TRYSTD.ASM < prev   
Assembly Source File  |  1988-06-21  |  5KB  |  183 lines

  1.         name    trystd
  2.         title   TRYSTD --- time & date conversion demo
  3.         page    55,132
  4. ;
  5. ; TRYSTD.ASM -- demonstrate use of time and date
  6. ;               conversion routines in SCANTD.ASM
  7. ;               and TD.ASM.
  8. ;
  9. ; Prompts user for date and time, converts input
  10. ; to binary and checks it for validity, then
  11. ; converts binary date and time back to ASCII
  12. ; for display.
  13. ;
  14. ; To exit from this demo program just press <Enter>
  15. ; alone at the prompt.
  16. ;
  17. ; Ray Duncan * PC Magazine * February 1988
  18. ;
  19.  
  20. cr      equ     0dh             ; ASCII carriage return
  21. lf      equ     0ah             ; ASCII line feed
  22.  
  23. stdin   equ     0               ; standard input handle
  24. stdout  equ     1               ; standard output handle
  25. stderr  equ     2               ; standard error handle
  26.  
  27.  
  28. DGROUP  group   _DATA
  29.  
  30.  
  31. _TEXT   segment word public 'CODE'
  32.  
  33.         assume  cs:_TEXT,ds:_DATA
  34.  
  35.         extrn   scantime:near   ; convert time to binary
  36.         extrn   scandate:near   ; convert date to binary
  37.         extrn   tcvt:near       ; convert time to ASCII
  38.         extrn   dcvt:near       ; convert date to ASCII
  39.  
  40. main    proc    near
  41.  
  42.         mov     ax,_DATA        ; make our data segment
  43.         mov     ds,ax           ; addressable...
  44.         mov     es,ax
  45.  
  46. main1:                          ; display "Enter date"
  47.         mov     dx,offset DGROUP:msg1
  48.         mov     cx,msg1_len
  49.         call    pmsg
  50.  
  51.         call    gline           ; get date from user
  52.         cmp     ax,2            ; empty line?
  53.         je      main9           ; yes, exit
  54.  
  55.                                 ; convert the date
  56.         mov     si,offset DGROUP:ibuff
  57.         call    scandate
  58.  
  59.         jc      main2           ; jump if bad date
  60.  
  61.                                 ; convert date for output
  62.         mov     si,offset DGROUP:msg2a
  63.         mov     bx,8
  64.         call    dcvt
  65.  
  66.                                 ; now display date
  67.         mov     dx,offset DGROUP:msg2
  68.         mov     cx,msg2_len
  69.         call    pmsg
  70.         jmp     main3           ; now do time
  71.  
  72. main2:                          ; display "Bad date!"
  73.         mov     dx,offset DGROUP:msg5
  74.         mov     cx,msg5_len
  75.         call    pmsg
  76.  
  77. main3:                          ; display "Enter time"
  78.         mov     dx,offset DGROUP:msg3
  79.         mov     cx,msg3_len
  80.         call    pmsg
  81.  
  82.         call    gline           ; get time from user
  83.         cmp     ax,2            ; empty line?
  84.         je      main9           ; yes, exit
  85.  
  86.                                 ; convert the time
  87.         mov     si,offset DGROUP:ibuff
  88.         call    scantime
  89.  
  90.         jc      main4           ; jump if bad time
  91.  
  92.                                 ; convert time for output
  93.         mov     si,offset DGROUP:msg4a
  94.         mov     bx,8
  95.         call    tcvt
  96.  
  97.                                 ; now display time
  98.         mov     dx,offset DGROUP:msg4
  99.         mov     cx,msg4_len
  100.         call    pmsg
  101.         jmp     main1           ; go do date again
  102.  
  103. main4:                          ; display "Bad time!"
  104.         mov     dx,offset DGROUP:msg6
  105.         mov     cx,msg6_len
  106.         call    pmsg
  107.         jmp     main1           ; go do date again
  108.  
  109. main9:  mov     ax,4c00h        ; final exit to MS-DOS
  110.         int     21h             ; with return code=0
  111.  
  112. main    endp
  113.  
  114.  
  115. pmsg    proc    near            ; display a message
  116.                                 ; call with
  117.                                 ; DS:DX = message
  118.                                 ; CX = length
  119.  
  120.         mov     bx,stdout       ; standard output handle
  121.         mov     ah,40h          ; function 40H = write
  122.         int     21h             ; transfer to MS-DOS
  123.         ret                     ; back to caller
  124.  
  125. pmsg    endp
  126.  
  127.  
  128. gline   proc    near            ; get line from user
  129.  
  130.                                 ; set DS:DX = buffer
  131.         mov     dx,offset DGROUP:ibuff
  132.         mov     cx,80           ; CX = maximum length
  133.         mov     bx,stdin        ; standard input handle
  134.         mov     ah,3fh          ; function 3FH = read
  135.         int     21h             ; transfer to MS-DOS
  136.         ret                     ; back to caller
  137.  
  138. gline   endp
  139.  
  140. _TEXT   ends
  141.  
  142.  
  143. _DATA   segment word public 'DATA'
  144.  
  145. msg1    db      cr,lf,lf
  146.         db      "Enter a date:   "
  147. msg1_len equ $-msg1
  148.  
  149. msg2    db      cr,lf
  150.         db      "You entered:    "
  151. msg2a   db      "XX/XX/XX"
  152. msg2_len equ $-msg2
  153.  
  154. msg3    db      cr,lf,lf
  155.         db      "Enter a time:   "
  156. msg3_len equ $-msg3
  157.  
  158. msg4    db      cr,lf
  159.         db      "You entered:    "
  160. msg4a   db      "XX:XX:XX"
  161. msg4_len equ $-msg4
  162.  
  163. msg5    db      cr,lf
  164.         db      "Bad date!"
  165. msg5_len equ $-msg5
  166.  
  167. msg6    db      cr,lf
  168.         db      "Bad time!"
  169. msg6_len equ $-msg6
  170.  
  171. ibuff   db      80 dup (?)              ; input buffer
  172.  
  173. _DATA   ends
  174.  
  175.  
  176. STACK   segment para stack 'STACK'
  177.  
  178.         db      128 dup (?)
  179.  
  180. STACK   ends
  181.  
  182.         end     main
  183.